#include<bits/stdc++.h>
using namespace std;
int n,m,aa[100005],a[100005],T,x[4],p[200005],tmp[200005];
char s[100005][20];
struct node{
    int x,idx;
    bool operator<(const node t)const{
        return x<t.x;
    }
}c[100005];
long long ans;
long long solve(int x){
    int t=__lg(x);
    if((1<<t)<x)
        t++;
    int N=(1<<t);
    for(int i=1;i<=N;i++)
        p[i]=i;
    for(int i=1;i<=t;i++){
        for(int j=1;j<=(N/(1<<(t-1)))/2;j++){
            if(s[i][j]=='0'&&a[p[j*2-1]]>=i);
        }
    }
    return 114514;
}
int main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",aa+i);
    for(int i=1;i<=m;i++)
        scanf("%d",&c[i].x),c[i].idx=i;
    sort(c+1,c+m+1);
    int k=__lg(n);
    if((1<<k)<n)
        k++;
    for(int i=1;i<=k;i++)
        scanf("%s",s[i]+1);
    scanf("%d",&T);
    while(T--){
        ans=0;
        scanf("%d%d%d%d",&x[0],&x[1],&x[2],&x[3]);
        for(int i=1;i<=n;i++)
            a[i]=aa[i]^x[i%4];
        for(int i=1;i<=m;i++)
            ans^=(1ll*c[i].idx*solve(c[i].x));
        printf("%lld\n",ans);
    }
    return 0;
}
